package org.coopac.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;


public class DAO_Service_Generator {

	/**
	 * @param args
	 * @throws FileNotFoundException 
	 */
	public static void main(String[] args){
		FileWriter filewriter;
		try {
			filewriter = new FileWriter("d://archivo.java");
			PrintWriter printw = new PrintWriter(filewriter);
	        printw.print("Esta es ");
	        printw.print("la primera linea del ");
	        printw.print("archivo.\n");
	        printw.println("Esta es la segunda linea");
	        printw.println("Esta es la tercera linea");
	        printw.close();
	        
            // Apertura del fichero y creacion de BufferedReader para poder
            // hacer una lectura comoda (disponer del metodo readLine()).
              File file = new File ("d://archivo.java");
              FileReader fileR = new FileReader (file);
              BufferedReader bufferedR = new BufferedReader(fileR);
            
            // Lectura del fichero
            String linea;
            while((linea=bufferedR.readLine())!=null){
                System.out.println(linea);
            }
            
//        	List<CoopacPersona> listar();	
//        	void save(CoopacPersona persona);
//        	void update(CoopacPersona persona);
//        	void delete(CoopacPersona persona);
//        	CoopacPersona getById(int id);
            
            String path = "d://model/";
            File directorio = new File(path);
            String [] ficheros = directorio.list();
            String line;
            for (int i = 0; i < ficheros.length; i++) {
                try {
                    BufferedReader br = new BufferedReader(new FileReader(path + ficheros[i]));
                    System.out.println("Contenido del fichero " + ficheros[i]);
                    System.out.println("Fichero new"+"d://model/dao/I"+ficheros[i].substring(6, ficheros[i].length()-5)+"DAO.java");
//                    while ((line = br.readLine()) != null) {
//                        System.out.println(line);
//                    }
                    
                    FileWriter filewriter2;
        			filewriter2 = new FileWriter("d://model/dao/I"+ficheros[i].substring(6, ficheros[i].length()-5)+"DAO.java");
        			PrintWriter printw2 = new PrintWriter(filewriter2);
        	        printw2.print("package org.coopac.dao;");
        	        printw2.println("import java.util.List;");
        	        printw2.println("import org.coopac.model."+ficheros[i].substring(0, ficheros[i].length()-5)+";");
        	        printw2.println("public interface I"+ficheros[i].substring(6, ficheros[i].length()-5)+"DAO {");
        	        printw2.println("	List<"+ficheros[i].substring(0, ficheros[i].length()-5)+"> listar();");
        	        printw2.println("	void save("+ficheros[i].substring(0, ficheros[i].length()-5)+" "+ficheros[i].substring(6, ficheros[i].length()-5).toLowerCase()+");");
        	        printw2.println("	void update("+ficheros[i].substring(0, ficheros[i].length()-5)+" "+ficheros[i].substring(6, ficheros[i].length()-5).toLowerCase()+");");
        	        printw2.println("	void delete("+ficheros[i].substring(0, ficheros[i].length()-5)+" "+ficheros[i].substring(6, ficheros[i].length()-5).toLowerCase()+");");
        	        printw2.println("	"+ficheros[i].substring(0, ficheros[i].length()-5)+" getById(int id);");
        	        printw2.println("}");
        	        printw2.close();
//        	        package org.coopac.dao;
//
//        	        import java.util.List;
//
//        	        import org.coopac.model.CoopacPersona;
//
//
//        	        public interface IPersonaDAO {
//        	        	List<CoopacPersona> listar();	
//        	        	void save(CoopacPersona persona);
//        	        	void update(CoopacPersona persona);
//        	        	void delete(CoopacPersona persona);
//        	        	CoopacPersona getById(int id);
//        	        }
        	        
        	       
        			
                    FileWriter filewriter3;
        			filewriter3 = new FileWriter("d://model/daoimpl/"+ficheros[i].substring(6, ficheros[i].length()-5)+"DAO.java");
        			PrintWriter printw3 = new PrintWriter(filewriter3);
        			
        			String nombrecoopac = ficheros[i].substring(0, ficheros[i].length()-5);
        			String nombresincoopac = ficheros[i].substring(6, ficheros[i].length()-5);
        			String nombresincoopacminus = ficheros[i].substring(6, ficheros[i].length()-5).toLowerCase();
        			
        	        printw3.print("package org.coopac.dao.impl;");
        	        printw3.println("import java.util.List;");
        	        printw3.println("import org.coopac.dao.I"+nombresincoopac+"DAO;");
        	        printw3.println("import org.coopac.model."+nombrecoopac+";");
        	        printw3.println("import org.hibernate.SessionFactory;");
        	        printw3.println("import org.springframework.beans.factory.annotation.Autowired;");
        	        printw3.println("import org.springframework.stereotype.Repository;");
        	        
        	        printw3.println("@Repository(\""+nombresincoopac+"DAO\")");
        	        printw3.println("public class "+nombresincoopac+"DAO extends BaseDaoImpl<"+nombrecoopac+"> implements I"+nombresincoopac+"DAO {");
        	        printw3.println("");
        	        
        	        printw3.println("	@Autowired");
        	        printw3.println("	SessionFactory sessionFactory;");
        	        printw3.println("");
        	        
        	        printw3.println("	@Override");
        	        printw3.println("	protected SessionFactory getSessionFactory() {");
        	        printw3.println("		return sessionFactory;}");
        	        printw3.println("");
        	        
        	        printw3.println("	@Override");
        	        printw3.println("	public List<"+nombrecoopac+"> listar() {");
        	        printw3.println("	return super.listar("+nombrecoopac+".class);");
        	        printw3.println("	}");
        	        printw3.println("");
        	        
        	        printw3.println("	@Override");
        	        printw3.println("	public void save("+nombrecoopac+" "+nombresincoopacminus+") {");
        	        printw3.println("		super.save("+nombresincoopacminus+");");
        	        printw3.println("	}");
        	        printw3.println("");
        	        
        	        printw3.println("	@Override");
        	        printw3.println("	public void update("+nombrecoopac+" "+nombresincoopacminus+") {");
        	        printw3.println("		super.update("+nombresincoopacminus+");");
        	        printw3.println("	}");
        	        printw3.println("");
        	        
        	        printw3.println("	@Override");
        	        printw3.println("	public void delete("+nombrecoopac+" "+nombresincoopacminus+") {");
        	        printw3.println("		super.delete("+nombresincoopacminus+");");
        	        printw3.println("	}");
        	        printw3.println("");
        	        
        	        printw3.println("	@Override");
        	        printw3.println("	public "+nombrecoopac+" getById(int id){");
        	        printw3.println("		return ("+nombrecoopac+") super.getById("+nombrecoopac+".class, id);");
        	        printw3.println("	}");
        	        printw3.println("");
        	        
        	        printw3.println("}");
        	       
        	        printw3.close();
        	        
        	        
//        	        package org.coopac.dao.impl;
//
//        	        import java.util.List;
//
//        	        import org.coopac.dao.IPersonaDAO;
//        	        import org.coopac.model.CoopacPersona;
//        	        import org.hibernate.SessionFactory;
//        	        import org.springframework.beans.factory.annotation.Autowired;
//        	        import org.springframework.stereotype.Repository;
//
//        	        @Repository("PersonaDAO")
//        	        public class PersonaDAO extends BaseDaoImpl<CoopacPersona> implements IPersonaDAO {
//        	        	
//        	        	@Autowired
//        	        	SessionFactory sessionFactory;
//        	        	
//        	        	@Override
//        	        	protected SessionFactory getSessionFactory() {
//        	        		return sessionFactory;
//        	        	}
//
//        	        	@Override
//        	        	public List<CoopacPersona> listar() {
//        	        		return super.listar(CoopacPersona.class);
//        	        	}
//
//        	        	@Override
//        	        	public void save(CoopacPersona persona) {
//        	        		super.save(persona);
//        	        	}
//
//        	        	@Override
//        	        	public void update(CoopacPersona persona) {
//        	        		super.update(persona);
//        	        	}
//
//        	        	@Override
//        	        	public void delete(CoopacPersona persona) {
//        	        		super.delete(persona);
//        	        	}
//
//        	        	@Override
//        	        	public CoopacPersona getById(int id) {
//        	        		return (CoopacPersona) super.getById(CoopacPersona.class, id);
//        	        	}
//        	        }
        	        
                    FileWriter filewriter4;
        			filewriter4 = new FileWriter("d://model/service/I"+ficheros[i].substring(6, ficheros[i].length()-5)+"Service.java");
        			PrintWriter printw4 = new PrintWriter(filewriter4);
        			
        	        printw4.print("package org.coopac.service;");
        	        printw4.println("import java.util.List;");
        	        printw4.println("import org.coopac.model."+ficheros[i].substring(0, ficheros[i].length()-5)+";");
        	        printw4.println("");
        	        printw4.println("public interface I"+ficheros[i].substring(6, ficheros[i].length()-5)+"Service {");
        	        printw4.println("	List<"+ficheros[i].substring(0, ficheros[i].length()-5)+"> listar();");
        	        printw4.println("	void save("+ficheros[i].substring(0, ficheros[i].length()-5)+" "+ficheros[i].substring(6, ficheros[i].length()-5).toLowerCase()+");");
        	        printw4.println("	void update("+ficheros[i].substring(0, ficheros[i].length()-5)+" "+ficheros[i].substring(6, ficheros[i].length()-5).toLowerCase()+");");
        	        printw4.println("	void delete("+ficheros[i].substring(0, ficheros[i].length()-5)+" "+ficheros[i].substring(6, ficheros[i].length()-5).toLowerCase()+");");
        	        printw4.println("	"+ficheros[i].substring(0, ficheros[i].length()-5)+" getById(int id);");
        	        printw4.println("}");
        	        
        	        printw4.close();
        	        
        	        
//        	        package org.coopac.service;
//
//        	        import java.util.List;
//
//        	        import org.coopac.model.CoopacPersona;
//
//        	        public interface IPersonaService {
//        	        	List<CoopacPersona> listar();	
//        	        	void save(CoopacPersona persona);
//        	        	void update(CoopacPersona persona);
//        	        	void delete(CoopacPersona persona);
//        	        	CoopacPersona getById(int id);
//        	        }
        	        
        	        
                    FileWriter filewriter5;
        			filewriter5 = new FileWriter("d://model/serviceimpl/"+ficheros[i].substring(6, ficheros[i].length()-5)+"Service.java");
        			PrintWriter printw5 = new PrintWriter(filewriter5);
        			
        			String nombrecoopac2 = ficheros[i].substring(0, ficheros[i].length()-5);
        			String nombresincoopac2 = ficheros[i].substring(6, ficheros[i].length()-5);
        			String nombresincoopacminus2 = ficheros[i].substring(6, ficheros[i].length()-5).toLowerCase();
        			
        	        printw5.print("package org.coopac.service.impl;\n");
        	        printw5.println("import java.util.List;");
        	        printw5.println("import org.coopac.dao.I"+nombresincoopac2+"DAO;");
        	        printw5.println("import org.coopac.model."+nombrecoopac2+";");
        	        printw5.println("import org.coopac.service.I"+nombresincoopac2+"Service;");
        	        printw5.println("import org.springframework.beans.factory.annotation.Autowired;");
        	        printw5.println("import org.springframework.stereotype.Service;");
        	        printw5.println("import org.springframework.transaction.annotation.Transactional;");
        	        
        	        printw5.println("	@Transactional");
        	        printw5.println("	@Service(\""+nombresincoopacminus2+"Service\")");
        	        printw5.println("	public class "+nombresincoopac2+"Service implements I"+nombresincoopac2+"Service {");
        	        
        	        printw5.println("	@Autowired");
        	        printw5.println("	private I"+nombresincoopac2+"DAO "+nombresincoopacminus2+"DAO;");
        	        printw5.println("");

        	        printw5.println("	@Override");
        	        printw5.println("	public List<"+nombrecoopac2+"> listar() {");
        	        printw5.println("	return "+nombresincoopacminus2+"DAO.listar();");
        	        printw5.println("	}");
        	        printw5.println("");
        	        
        	        printw5.println("	@Override");
        	        printw5.println("	public void save("+nombrecoopac2+" "+nombresincoopacminus2+") {");
        	        printw5.println("		"+nombresincoopacminus2+"DAO.save("+nombresincoopacminus2+");");
        	        printw5.println("	}");
        	        printw5.println("");
        	        
        	        printw5.println("	@Override");
        	        printw5.println("	public void update("+nombrecoopac2+" "+nombresincoopacminus2+") {");
        	        printw5.println("		"+nombresincoopacminus2+"DAO.update("+nombresincoopacminus2+");");
        	        printw5.println("	}");
        	        printw5.println("");
        	        
        	        printw5.println("	@Override");
        	        printw5.println("	public void delete("+nombrecoopac2+" "+nombresincoopacminus2+") {");
        	        printw5.println("		"+nombresincoopacminus2+"DAO.delete("+nombresincoopacminus2+");");
        	        printw5.println("	}");
        	        printw5.println("");
        	        
        	        printw5.println("	@Override");
        	        printw5.println("	public "+nombrecoopac2+" getById(int id){");
        	        printw5.println("		return "+nombresincoopacminus2+"DAO.getById(id);");
        	        printw5.println("	}");
        	        printw5.println("");
        	        
        	        printw5.println("}");
        	       
        	        printw5.close();
        	        

//        	        package org.coopac.service.impl;
//
//        	        import java.util.List;
//
//        	        import org.coopac.dao.IPersonaDAO;
//        	        import org.coopac.model.CoopacPersona;
//        	        import org.coopac.service.IPersonaService;
//        	        import org.springframework.beans.factory.annotation.Autowired;
//        	        import org.springframework.stereotype.Service;
//        	        import org.springframework.transaction.annotation.Transactional;
//
//        	        @Transactional
//        	        @Service("personaService")
//        	        public class PersonaService implements IPersonaService {
//        	        	
//        	        	@Autowired
//        	        	private IPersonaDAO personaDAO;
//        	        	
//        	        	@Override
//        	        	public List<CoopacPersona> listar() {
//        	        		return personaDAO.listar();
//        	        	}
//
//        	        	@Override
//        	        	public void save(CoopacPersona persona) {
//        	        		personaDAO.save(persona);
//        	        	}
//
//        	        	@Override
//        	        	public void update(CoopacPersona persona) {
//        	        		personaDAO.update(persona);
//        	        	}
//
//        	        	@Override
//        	        	public void delete(CoopacPersona persona) {
//        	        		personaDAO.delete(persona);
//        	        	}
//
//        	        	@Override
//        	        	public CoopacPersona getById(int id) {
//        	        		return personaDAO.getById(id);
//        	        	}
//
//        	        }


                    
                    File file2 = new File ("d://model/dao/"+ficheros[i].substring(0, ficheros[i].length()-5)+"DAO.java");
                    FileReader fileR2 = new FileReader (file2);
                    BufferedReader bufferedR2 = new BufferedReader(fileR2);
                    
                    while((linea=bufferedR2.readLine())!=null){
                        System.out.println(linea);
                    }
                    
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}
